int SIDE = 600;
int YAOSPACE = SIDE/100;
int YAOWIDTH = YAOSPACE * 6;
int offset; 
int[] yaos = {63,  0, 17, 34, 23, 58,  2, 16, 
              55, 59,  7, 56, 61, 47,  4,  8, 
              25, 38,  3, 48, 41, 37, 32,  1, 
              57, 39, 33, 30, 18, 45, 28, 14, 
              60, 15, 40,  5, 53, 43, 20, 10, 
              35, 49, 31, 62, 24,  6, 26, 22, 
              29, 46,  9, 36, 52, 11, 13, 44, 
              54, 27, 50, 19, 51, 12, 21, 42};

size(SIDE,SIDE);
smooth();
stroke(0);
strokeCap(SQUARE);
strokeWeight(YAOSPACE/3*1.1);
background(255);
for (int i=1; i<7; i++) {
  ellipse(width/2, width/2, 
  width-i*YAOSPACE*2, height-i*YAOSPACE*2);
}
stroke(255);
strokeWeight(YAOSPACE);
for (float a=PI/64; a<(PI*2); a+=PI/32) {
  line(width/2, width/2, 
       width/2+width/2*sin(a), width/2+width/2*cos(a));
}
stroke(0);
strokeWeight(YAOSPACE/3);
offset = SIDE/2-(YAOWIDTH+YAOSPACE)*4+YAOSPACE/2;
for (int j=0; j<8; j++) {
  for (int i=0; i<8; i++) {
    stroke(0);
    for (int k=0; k<6; k++) {
      line(offset+i*(YAOWIDTH+YAOSPACE),
           offset+j*(YAOWIDTH+YAOSPACE)+k*YAOSPACE,
           offset+i*(YAOWIDTH+YAOSPACE)+YAOWIDTH,
           offset+j*(YAOWIDTH+YAOSPACE)+k*YAOSPACE);
      if (((yaos[j*8+i] & (1<<(5-k)))>>(5-k))==0) {
        stroke(255);
        line(offset+i*(YAOWIDTH+YAOSPACE)+(YAOWIDTH/2-YAOSPACE/2),
             offset+j*(YAOWIDTH+YAOSPACE)+k*YAOSPACE,
             offset+i*(YAOWIDTH+YAOSPACE)+(YAOWIDTH/2+YAOSPACE/2),
             offset+j*(YAOWIDTH+YAOSPACE)+k*YAOSPACE);
        stroke(0);
      }
    }
  }
}
           


